<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Struts</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Struts"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Struts rootpage-Struts skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Struts</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr">
<table class="float-right infobox toccolours toptextcells" style="border-spacing:5px; font-size:90%; text-align:left; width:21em;">
<tbody><tr>
<th colspan="2" class="hintergrundfarbe6" style="font-size:105%; text-align:center;">Struts
<p class="mw-empty-elt">
</p>
</th></tr>
<tr>
<td colspan="2" style="text-align:center;"><span typeof="mw:File"></span>
</td></tr>
<tr>
<th colspan="2" class="hintergrundfarbe5" style="font-size:105%; text-align:center;">Basisdaten
<p class="mw-empty-elt">
</p>
</th></tr>
<tr>
<td><b><a href="Softwareentwickler" title="Softwareentwickler">Entwickler</a></b>
</td>
<td><span class="wikidata-content"><a href="Apache_Software_Foundation" title="Apache Software Foundation">Apache Software Foundation</a></span>
</td></tr>
<tr>
<td><b>Erscheinungsjahr</b>
</td>
<td><span class="wikidata-content">10. Oktober 2006, 11. April 2014<sup id="cite_ref-_fe6c5cdf5d8f68c7_1-0" class="reference"><a href="#cite_note-_fe6c5cdf5d8f68c7-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></span>
</td></tr>
<tr>
<td><b>Aktuelle <a href="Version_(Software)" title="Version (Software)">Version</a></b>
</td>
<td><span class="wikidata-content">7.1.1<sup id="cite_ref-_d606183479e51619_2-0" class="reference"><a href="#cite_note-_d606183479e51619-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup></span> <br> (<span class="wikidata-content">1. Oktober 2025</span>)
</td></tr>
<tr>
<td><b>Aktuelle Vorabversion</b>
</td>
<td><span class="wikidata-content">6.7.0<sup id="cite_ref-_09fd17027b647fb4_3-0" class="reference"><a href="#cite_note-_09fd17027b647fb4-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup></span>
</td></tr>
<tr>
<td><b><a href="Betriebssystem" title="Betriebssystem">Betriebssystem</a></b>
</td>
<td><a href="Plattformunabh%C3%A4ngigkeit" title="Plattformunabhängigkeit">plattformunabhängig</a>
</td></tr>
<tr>
<td><b><a href="Programmiersprache" title="Programmiersprache">Programmiersprache</a></b>
</td>
<td><span class="wikidata-content"><a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a><sup id="cite_ref-_5b9989abb649b412_4-0" class="reference"><a href="#cite_note-_5b9989abb649b412-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-_fe6c5cdf5d8f68c7_1-1" class="reference"><a href="#cite_note-_fe6c5cdf5d8f68c7-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></span>
</td></tr>
<tr>
<td><b>Kategorie</b>
</td>
<td><a href="Webframework" title="Webframework">Webframework</a>
</td></tr>
<tr>
<td><b>Lizenz</b>
</td>
<td><span class="wikidata-content"><a href="Apache-Lizenz" title="Apache-Lizenz">Apache-Lizenz</a></span>
</td></tr>
<tr>
<td class="hintergrundfarbe5" colspan="2" style="text-align:center;"><a rel="nofollow" class="external text" href="https://struts.apache.org/">struts.apache.org</a>
</td></tr></tbody></table>
<p><b>Struts</b> ist ein <a href="Open_Source" title="Open Source">Open-Source</a>-<a href="Framework" title="Framework">Framework</a> für die Präsentations- und Steuerungsschicht von <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a>-<a href="Webanwendung" title="Webanwendung">Webanwendungen</a>.
Struts beschleunigt die Entwicklung von Webanwendungen wesentlich, indem es <a href="Hypertext_Transfer_Protocol" title="Hypertext Transfer Protocol">HTTP</a>-Anfragen in einem standardisierten Prozess verarbeitet. Dabei bedient es sich standardisierter Techniken wie <a href="Jakarta_Servlet" title="Jakarta Servlet">Jakarta Servlet</a>, <a href="JavaBeans" title="JavaBeans">JavaBeans</a>, Resource Bundles und <a href="Extensible_Markup_Language" title="Extensible Markup Language">XML</a> sowie verschiedener <a href="Apache_Commons" title="Apache Commons">Apache-Commons</a>-Pakete. Für den Entwickler bedeutet das, dass viele applikationsrelevante Funktionen bereits implementiert und einsatzbereit sind. Struts wird in sehr vielen Webanwendungen eingesetzt und gemeinhin als solides <a href="Framework" title="Framework">Framework</a> angesehen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Geschichte">Geschichte</h2></div>
<p>Struts wurde von Craig McClanahan im Jahr 2000 entwickelt. Seitdem arbeitet eine ständig wachsende Entwicklergemeinde an der Verbesserung des Frameworks.
</p><p>Als eines der bekanntesten <a href="Jakarta-Projekt" title="Jakarta-Projekt">Jakarta-Projekte</a> ist Struts im Jahr 2004 zu einem <i>„Apache Toplevel Project“</i><sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> avanciert.
</p><p>Am 27. November 2005 verkündete der <b>WebWork</b> Entwickler Patrick Lightbody, dass das Struts ähnliche WebWork als Basis für Apache Struts 2 herangezogen wird.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> Die folgende Release 2.2.x werde zwar noch unter dem Namen WebWork vertrieben, weiterführende Features und Major Releases werden aber ausschließlich unter Struts 2 laufen.
WebWork war ein auf XWork basierendes Java <a href="Webframework" title="Webframework">Webframework</a> der Firma OpenSymphony.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> Zusätzlich zu den von XWork gebotenen Features ermöglichte WebWork Unterstützung bei der Erzeugung von wiederverwendbaren <i>UI templates</i>. Dies umfasste unter anderem <a href="Internationalisierung_(Softwareentwicklung)" title="Internationalisierung (Softwareentwicklung)"> Internationalisierung</a>, Formularkontrolle, dynamisches Formular-Parameter-Mapping zu <a href="JavaBeans" title="JavaBeans">JavaBeans</a>, robuste client- und serverseitige Validierung und vieles mehr. WebWork war unter der OpenSymphony Software License verfügbar, welche einer modifizierten Form der <a href="Apache_Software_License" class="mw-redirect" title="Apache Software License">Apache Software License</a> entspricht.
</p><p>2009 wurde dann auch in einer gemeinsamen Erklärung bekanntgegeben, dass WebWork eine bessere Basis für die Weiterentwicklung von Struts darstelle und die Verschmelzung der beiden Frameworks von der technischen Überlegenheit von WebWork und der größeren Struts Community profitieren würde.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
Ab der Version 2 ist das Struts-Framework mit dem <a href="WebWork" class="mw-redirect" title="WebWork">WebWork</a>-Framework verschmolzen.
</p><p>Der Ansatz von Struts wurde auch für die Entwicklung von Struts4PHP benutzt.
</p><p>Neben der aktuellen und stetig weiterentwickelten Version von Struts 2 existiert seit 2022 ein <a href="Klon_(Informationstechnik)" title="Klon (Informationstechnik)">Klon</a> von Struts 1, der das Legacy-Framework von Struts 1 auf einen aktuellen <a href="Jakarta_EE" title="Jakarta EE">Jakarta EE</a> kompatiblen Stack aktualisiert.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Aufbau">Aufbau</h2></div>
<p>Dem Struts-Framework liegt das <a href="Entwurfsmuster" title="Entwurfsmuster">Entwurfsmuster</a> „<a href="Model_View_Controller" title="Model View Controller">Model View Controller</a>“ zugrunde. Die von Struts zur Verfügung gestellten Komponenten entstammen den Bereichen Präsentation (View) und Programmsteuerung (Controller). Funktionen aus dem Modell-Bereich müssen in einer Anwendung anderweitig implementiert werden. Das Framework beinhaltet zurzeit ungefähr 300 Java-Klassen, die in acht Kernpakete eingeteilt sind.
</p>
<div class="mw-heading mw-heading2"><h2 id="Theoretischer_Ansatz">Theoretischer Ansatz</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Model-1-Architektur_mit_JavaServlets/JSP"><span id="Model-1-Architektur_mit_JavaServlets.2FJSP"></span>Model-1-Architektur mit JavaServlets/JSP</h3></div>
<p>Nachdem die Technik von <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a>-<a href="Servlet" class="mw-redirect" title="Servlet">Servlets</a> eingeführt wurde, erkannte man schnell, dass das Erstellen von <a href="Hypertext_Markup_Language" title="Hypertext Markup Language">HTML</a>-Seiten mit Servlets zeitaufwändig und die Weiterentwicklung von Views sehr mühsam sein kann. Hinzu kam, dass alle drei Komponenten des <a href="Model_View_Controller" title="Model View Controller">Model-View-Controller</a>-Konzepts in einem Servlet realisiert wurden. Daraufhin wurde <a href="Jakarta_Server_Pages" title="Jakarta Server Pages">JSP</a> eingeführt, die vor allem dem <a href="Webdesigner" title="Webdesigner">Webdesigner</a> die Arbeit leichter machte und sich in kurzer Zeit durchsetzte. Daraus entwickelte sich die <i>Model-1-Architektur</i>, die beschreibt, dass Datenhaltung, <a href="Gesch%C3%A4ftslogik" title="Geschäftslogik">Geschäftslogik</a> und View in einer JSP anzusiedeln sind, was jedoch bei komplexer Anwendungslogik zu neuen Problemen führt: Die JSP wird in kürzester Zeit unüberschaubar und lässt sich nur durch Entwickler warten, die sowohl HTML- als auch Java-Kenntnisse besitzen. Zwar mildert die Verwendung von <a href="Tag-Library" title="Tag-Library">Tag-Bibliotheken</a> (wie z. B. <a href="JavaServer_Pages_Standard_Tag_Library" class="mw-redirect" title="JavaServer Pages Standard Tag Library">JSTL</a>) dieses Problem etwas, weil kein Java-Code mehr benötigt wird. Das konzeptionelle Grundproblem der Vermischung von Präsentation mit fachlicher Funktionalität bleibt jedoch bestehen.
</p>
<div class="mw-heading mw-heading3"><h3 id="Model-2-Architektur_mit_Struts">Model-2-Architektur mit Struts</h3></div>
<p>Die aufgeführten Probleme haben dazu beigetragen, dass man ein neues Konzept entwickeln musste, das die einzelnen Komponenten klarer voneinander abgrenzt und Java-Servlets und JSP gleichermaßen einbindet. Es entstand die <i><a href="Model_2" title="Model 2">Model-2</a>-Architektur für Webanwendungen</i>, die ihren Einsatz im Struts-Framework gefunden hat. Diese setzt einen <a href="Front_Controller" title="Front Controller">Front Controller</a> ein, wonach jeder Aufruf erst zentral verarbeitet und dann an die entsprechenden Controller weitergeleitet wird.
</p>
<div class="mw-heading mw-heading2"><h2 id="Struts2_Features">Struts2 Features</h2></div>
<ul><li>Einfache auf <a href="Plain_Old_Java_Object" title="Plain Old Java Object">POJOs</a> basierende Action-Klassen</li>
<li>Einfache <a href="Testbarkeit" title="Testbarkeit">Testbarkeit</a></li>
<li><a href="Threadsicherheit" title="Threadsicherheit">Threadsicher</a></li>
<li><a href="Ajax_(Programmierung)" title="Ajax (Programmierung)">Ajax</a>-Unterstützung</li></ul>
<dl><dd><ul><li><a href="JQuery" title="JQuery">jQuery</a>-Plugin</li>
<li>Dojo-Plugin (veraltet)</li>
<li>AJAX Client Side Validation</li></ul></dd></dl>
<ul><li>Unterstützung für Templates</li>
<li>Verschiedene Ergebnistypen</li>
<li>Einfach zu erweitern durch Plugins</li></ul>
<dl><dd><ul><li><a href="Representational_State_Transfer" title="Representational State Transfer">REST</a>-Plugin (REST basierende Actions, Extension-less URLs)</li>
<li>Convention Plugin (Action Konfiguration via Konventionen und Annotations)</li>
<li><a href="Spring_(Framework)" title="Spring (Framework)">Spring</a>-Plugin (<a href="Dependency_Injection" title="Dependency Injection">Dependency Injection</a>)</li>
<li><a href="Hibernate_(Framework)" title="Hibernate (Framework)">Hibernate</a>-Plugin</li>
<li>JFreechart-Plugin (Charts)</li>
<li>Rome-Plugin (RSS Feeds)</li></ul></dd></dl>
<div class="mw-heading mw-heading2"><h2 id="Praktische_Umsetzung">Praktische Umsetzung</h2></div>
<p>Das Ziel ist die Trennung von Präsentation, Datenhaltung und <a href="Anwendungslogik" class="mw-redirect" title="Anwendungslogik">Anwendungslogik</a>. Dies erhöht die Übersicht und die Wartbarkeit. Die Kernelemente in Struts, die zu implementieren sind:
</p>
<dl><dt>Action</dt>
<dd>für Programmsteuerung, Schnittstelle zwischen der Ansicht (View) und der Anwendungslogik</dd>
<dt><a href="JavaServer_Pages" class="mw-redirect" title="JavaServer Pages">JSP</a></dt>
<dd>für Präsentation</dd></dl>
<p>Die Komponenten werden in der zentralen <a href="Konfiguration_(Computer)" title="Konfiguration (Computer)">Konfigurationsdatei</a> von Struts miteinander verknüpft.
</p><p>Beispiel <code>struts-config.xml</code> in Struts1:
</p>
<div class="mw-highlight mw-highlight-lang-xml mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="nt"><struts-config></span>
<span class="w"> </span><span class="cm"><!-- FormBean Definitionen --></span>
<span class="w"> </span><span class="nt"><form-beans</span><span class="w"> </span><span class="na">type=</span><span class="s">"org.apache.struts.action.ActionFormBean"</span><span class="nt">></span>
<span class="w"> </span><span class="nt"><form-bean</span><span class="w"> </span><span class="na">name=</span><span class="s">"RegisterForm"</span><span class="w"> </span><span class="na">type=</span><span class="s">"bar.foo.web.RegisterForm"</span><span class="w"> </span><span class="nt">/></span>
<span class="w"> </span><span class="nt"></form-beans></span>
<span class="w"> </span><span class="cm"><!-- Action Definitionen --></span>
<span class="w"> </span><span class="nt"><action-mappings</span><span class="w"> </span><span class="na">type=</span><span class="s">"org.apache.struts.action.ActionMapping"</span><span class="nt">></span>
<span class="w"> </span><span class="nt"><action</span><span class="w"> </span><span class="na">path=</span><span class="s">"register"</span>
<span class="w"> </span><span class="na">name=</span><span class="s">"RegisterForm"</span>
<span class="w"> </span><span class="na">type=</span><span class="s">"bar.foo.web.RegisterAction"</span>
<span class="w"> </span><span class="na">input=</span><span class="s">"/web/register.jsp"</span>
<span class="w"> </span><span class="na">scope=</span><span class="s">"request"</span>
<span class="w"> </span><span class="na">validate=</span><span class="s">"true"</span><span class="nt">></span>
<span class="w"> </span><span class="nt"><forward</span><span class="w"> </span><span class="na">name=</span><span class="s">"success"</span><span class="w"> </span><span class="na">path=</span><span class="s">"/home.do"</span><span class="w"> </span><span class="nt">/></span>
<span class="w"> </span><span class="nt"><forward</span><span class="w"> </span><span class="na">name=</span><span class="s">"failure"</span><span class="w"> </span><span class="na">path=</span><span class="s">"/error.do"</span><span class="w"> </span><span class="nt">/></span>
<span class="w"> </span><span class="nt"></action></span>
<span class="w"> </span><span class="nt"></action-mappings></span>
<span class="w"> </span><span class="nt"></struts-config></span>
</pre></div>
<p>Beispiel <code>struts.xml</code> in Struts2:
</p>
<div class="mw-highlight mw-highlight-lang-xml mw-content-ltr" dir="ltr"><pre><span></span><span class="nt"><struts></span>
<span class="w"> </span><span class="nt"><constant</span><span class="w"> </span><span class="na">name=</span><span class="s">"struts.enable.DynamicMethodInvocation"</span><span class="w"> </span><span class="na">value=</span><span class="s">"false"</span><span class="w"> </span><span class="nt">/></span>
<span class="w"> </span><span class="nt"><package</span><span class="w"> </span><span class="na">name=</span><span class="s">"myApplication"</span><span class="w"> </span><span class="na">extends=</span><span class="s">"struts-default"</span><span class="nt">></span>
<span class="w"> </span><span class="nt"><action</span><span class="w"> </span><span class="na">name=</span><span class="s">"index"</span><span class="nt">></span>
<span class="w"> </span><span class="nt"><result></span>/jsp/index.jsp<span class="nt"></result></span>
<span class="w"> </span><span class="nt"></action></span>
<span class="w"> </span><span class="nt"></package></span>
<span class="nt"></struts></span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Die_Präsentation"><span id="Die_Pr.C3.A4sentation"></span>Die Präsentation</h3></div>
<p>Ein <a href="Paradigma" title="Paradigma">Paradigma</a> ist, in der JSP so wenig Java-Code (Scriptlets) wie möglich zu verwenden. Um dies zu ermöglichen, sollte man die von Struts mitgelieferten <a href="Tag-Library" title="Tag-Library">Tag-Libs</a> einsetzen, die einem beim Auslesen der Form-Bean helfen.
</p><p>Beispiel:
</p>
<pre><html:text name="RegisterForm" property="emailAddress" size="20"/>
</pre>
<p>Hier wird das Attribut „<code>emailAddress</code>“ der Action (Struts2) bzw. Form-Bean (Struts1) über die Setter-Methode nach dem Senden des Formulars mit dem Inhalt des Textfeldes gefüllt. Weiterhin wird ein <code><input type="text" size="20" name="emailAddress" value="..."/></code> HTML-Element in der JSP generiert.
</p>
<div class="mw-heading mw-heading4"><h4 id="Tiles">Tiles</h4></div>
<p>Struts besitzt ebenfalls eine Vorlagen-Erweiterung, Tiles genannt. Sie ermöglichen dem Entwickler, seine Webseiten komponentenbasiert aufzubauen (Header, Footer, Content, und so weiter). Tiles können sowohl JSPs als auch weitere Tiles inkludieren.
</p>
<div class="mw-heading mw-heading4"><h4 id="Validator">Validator</h4></div>
<p>Ab der Version 1.1 besitzt Struts ein Validierungswerkzeug, das dem Entwickler bei der Überprüfung der abgesendeten Formdaten hilft. Es arbeitet mit sogenannten <i>Validatoren</i>, die eine spezifische Prüfaufgabe durchführen und beliebig wiederverwendet werden können. Struts bringt einige vorgefertigte Validatoren mit (z. B. für die Prüfung, ob ein Feld ausgefüllt ist oder eine gültige Zahl enthält). Stellt ein <a href="Validator" title="Validator">Validator</a> einen Fehler fest, wird automatisch auf die Ausgangsseite zurückgeleitet und der Fehler angezeigt. Es ist aber auch möglich, den Fehler via <a href="JavaScript" title="JavaScript">JavaScript</a> clientseitig prüfen zu lassen und den Fehler noch vor dem Absenden des Formulars in einem Fenster anzuzeigen.
</p>
<div class="mw-heading mw-heading3"><h3 id="Die_Form-Bean_(Struts1)"><span id="Die_Form-Bean_.28Struts1.29"></span>Die Form-Bean (Struts1)</h3></div>
<p>Die Form-Bean ist eine normale <a href="JavaBeans" title="JavaBeans">JavaBean</a>, die alle benötigten Daten für die JSP und die Action enthält. Sie ist die Schnittstelle zwischen diesen beiden Komponenten und wird über die <code>struts-config</code> mit einem Formular in der JSP verknüpft. Wenn das Formular abgeschickt wird, wird die Bean durch das <code>ActionServlet</code> (noch bevor die Action ausgeführt wird) über die <a href="Zugriffsfunktion" title="Zugriffsfunktion">setter-Methoden</a> mit den entsprechenden Eingabewerten gefüttert.
</p><p>Die <code>FormBean</code> enthält außerdem eine Validierungsmethode, welche, wenn in der Konfiguration aktiviert, die Daten der Form-Bean überprüft, bevor sie zur Action geschickt werden. Außerdem enthält sie eine <code>reset</code>-Methode um den Inhalt zurückzusetzen, damit sie wiederverwendet werden kann, was den Aufwand für die Speicherverwaltung reduziert (siehe: <a href="Slab_allocator" title="Slab allocator">Slab allocator</a>).
</p><p>Da diese Art der Datenhaltung oft zu <i>starr</i> ist, wurde von den Struts-Entwicklern die Möglichkeit geschaffen, die Beans in der <i>struts-config.xml</i> zu deklarieren, wodurch die starre und aufwändige Programmierung der Beans entfällt. Zum Zugriff wird dann die <code>ActionForm</code> zu einer <code>DynaBean</code> des Apache Commons BeanUtils Projekt <a href="Typumwandlung" title="Typumwandlung">gecastet</a> und die Daten werden dann über Schlüssel abgefragt. Bei der Verwendung dynamischer Beans kann außerdem zur Validierung das Commons Validation Framework eingesetzt werden.
</p>
<div class="mw-heading mw-heading3"><h3 id="Die_Action">Die Action</h3></div>
<p>Die Action ist diejenige Komponente, die mit dem <a href="Front-End_und_Back-End" class="mw-redirect" title="Front-End und Back-End">Backend</a> kommuniziert, von ihr Daten holt und sie auch wieder dahin schreibt. Sie enthält meist weitere Prüf- und Auswertungsmechanismen.
</p><p>Die Action ist ebenfalls für die Navigation durch die Webseite verantwortlich, da sie nach getaner Arbeit ein <code>ActionForward</code> zurückgeben muss. Je nachdem, welchen Forward die Action zurückgibt, entscheidet das Struts-Framework anhand der <code>struts-config</code>, zu welcher Seite weitergeleitet werden soll.
</p>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="JavaServer_Faces" class="mw-redirect" title="JavaServer Faces">JavaServer Faces</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Matthias Weßendorf: <i>Struts – Websites mit Struts 1.2 & 1.3 und Ajax effizient entwickeln.</i> 2. Auflage. W3L, Herdecke 2006, ISBN 3-937137-26-2</li>
<li>Michael Albrecht, Manfred Wolff: <i>Struts ge-packt.</i> MITP, Bonn 2004, ISBN 3-8266-1431-3</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><span class="cite">Łukasz Lenart: <a rel="nofollow" class="external text" href="https://struts.apache.org/"><i>Offizielle Website des Apache-Struts2-Projektes.</i></a> Aktuelle Struts2-Version.<span class="Abrufdatum"> Abgerufen am 11. November 2023</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AStruts&rft.title=Offizielle+Website+des+Apache-Struts2-Projektes&rft.description=Offizielle+Website+des+Apache-Struts2-Projektes&rft.identifier=https%3A%2F%2Fstruts.apache.org&rft.creator=%C5%81ukasz+Lenart&rft.date=&rft.language=en"> </span></li>
<li><span class="cite">Stefan Graff: <a rel="nofollow" class="external text" href="https://github.com/weblegacy/struts1"><i>Struts1-Upgrade to current technology.</i></a> Aktualisierte Version der Legacy-Struts1-Version.<span class="Abrufdatum"> Abgerufen am 11. November 2023</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AStruts&rft.title=Struts1-Upgrade+to+current+technology&rft.description=Struts1-Upgrade+to+current+technology&rft.identifier=https%3A%2F%2Fgithub.com%2Fweblegacy%2Fstruts1&rft.creator=Stefan+Graff&rft.date=&rft.language=en"> </span></li>
<li><a rel="nofollow" class="external text" href="https://cwiki.apache.org/confluence/display/S2PLUGINS/Home">Struts 2 Plugin Registry</a></li>
<li><a rel="nofollow" class="external text" href="https://github.com/struts-community-plugins/struts2-jquery">Struts2 jQuery Plugin</a></li>
<li><a rel="nofollow" class="external text" href="https://struts.apache.org/getting-started/">Einführung zu Struts2</a> (englisch)</li>
<li><a rel="nofollow" class="external text" href="http://www.javapractices.com/topic/TopicAction.do?Id=193">Kritik an Struts1</a> (englisch)</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-_fe6c5cdf5d8f68c7-1"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-_fe6c5cdf5d8f68c7_1-0">a</a></sup> <sup><a href="#cite_ref-_fe6c5cdf5d8f68c7_1-1">b</a></sup></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://projects.apache.org/json/projects/struts.json"><cite style="font-style:italic">projects.apache.org</cite>.</a> (abgerufen am 8. April 2020).</span>
</li>
<li id="cite_note-_d606183479e51619-2"><span class="mw-cite-backlink"><a href="#cite_ref-_d606183479e51619_2-0">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://github.com/apache/struts/releases/tag/STRUTS_7_1_1"><cite style="font-style:italic"><span lang="en">Release 7.1.1</span></cite>.</a> 1. Oktober 2025 (abgerufen am 11. November 2025).</span>
</li>
<li id="cite_note-_09fd17027b647fb4-3"><span class="mw-cite-backlink"><a href="#cite_ref-_09fd17027b647fb4_3-0">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://github.com/apache/struts/releases/tag/STRUTS_6_7_0"><cite style="font-style:italic"><span lang="en">Releases STRUTS_6_7_0</span></cite>.</a> 24. November 2024 (abgerufen am 18. Dezember 2024).</span>
</li>
<li id="cite_note-_5b9989abb649b412-4"><span class="mw-cite-backlink"><a href="#cite_ref-_5b9989abb649b412_4-0">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.openhub.net/p/struts/analyses/latest/languages_summary"><cite style="font-style:italic"><span lang="en">The struts Open Source Project on Open Hub: Languages Page</span></cite>.</a> In: <cite style="font-style:italic">Open Hub</cite>. (abgerufen am 18. Oktober 2018).</span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://jakarta.apache.org/site/news/news-2004-1stHalf.html#20040318.1">Jakarta News</a> 18. März 2004</span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r261891140">
/* start https://de.wikipedia.org/ */
.mw-parser-output .webarchiv-memento a{color:inherit}
/* end https://de.wikipedia.org/ */
</style><a rel="nofollow" class="external text" href="https://web.archive.org/web/20090221090345/http://blogs.opensymphony.com/webwork/2005/11/webwork_joining_struts.html">WebWork joining Struts</a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> vom 21. Februar 2009 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>)</span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><a href="#cite_ref-7">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20110612101623/http://www.opensymphony.com/webwork/">opensymphony.com/webwork</a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> vom 12. Juni 2011 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>)</span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><a href="#cite_ref-8">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.mail-archive.com/dev@struts.apache.org/msg13815.html"><i>PROPOSAL: Merger with WebWork</i> von Don Brown, Ted Husted, Jason Carreira und Patrick Lightbody, 25. November 2009</a></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><a href="#cite_ref-9">↑</a></span> <span class="reference-text"><span class="cite">Stefan Graff: <a rel="nofollow" class="external text" href="https://github.com/weblegacy/struts1"><i>Struts1 - Reloaded.</i></a> Github. 2024,<span class="Abrufdatum"> abgerufen am 13. Februar 2024</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AStruts&rft.title=Struts1+-+Reloaded&rft.description=Struts1+-+Reloaded&rft.identifier=https%3A%2F%2Fgithub.com%2Fweblegacy%2Fstruts1&rft.creator=Stefan+Graff&rft.date=2024"> </span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-06-04" href="https://de.wikipedia.org/wiki/?title=Struts&oldid=256679199">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>